#!/bin/bash
# 飞牛OS磁盘管理部署脚本（简化版）
# 终端颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BOLD='\033[1m'
NC='\033[0m'
# 路径常量 - 修改业务脚本路径为/usr/local/bin/
SERVICE_SCRIPT="/usr/local/bin/scsi-disk-manager"
UDEV_RULE="/etc/udev/rules.d/99-scsi-disk-trigger.rules"
SYSTEMD_SERVICE="/etc/systemd/system/scsi-disk-manager.service"
LOG_DIR="/vol1/1000/_HDDlog"
LOG_FILE="$LOG_DIR/scsi-disk-manager.log"
# 权限检查
if [[ $EUID -ne 0 ]]; then
    echo "【权限错误】需root权限运行，可在指令前面加sudo临时提权"
    exit 1
fi
# 交互流程1：安装、卸载选择（优化输入判定）
clear
echo "--------------------------------------------------------------------------------"
echo -e "${BOLD}【功能说明】${NC}"
echo "   • 即将部署：manage_shutdown（关机安全断电管理）"
echo "   • 功能作用：控制硬盘在系统关机/重启阶段的断电逻辑（确保数据同步、安全断电）"
echo "   • 解决问题：飞牛OS关机时硬盘异响，硬盘不安全断电次数增加的问题"
echo "   • 部署内容：启用功能（修改关键值为1）、配置systemd开机自启、udev热插拔触发、配置日志记录"
echo "--------------------------------------------------------------------------------"
echo -e "${BOLD}【请选择安装或卸载】${NC}"
echo "1. 一键部署并开启飞牛OS关机磁盘安全断电管理功能"
echo -e "2. 一键卸载 ${RED}（禁用功能（关键值改为0），清理所有组件）${NC}"
echo -e "\n${YELLOW}操作说明：单选1或2，无操作2分钟后自动退出，按ctrl+c中断退出${NC}"
# 优化输入判定：循环等待有效输入，增加错误提示
while true; do
    read -t 120 OPTION
    # 超时处理
    if [ $? -ne 0 ]; then
        echo -e "\n${RED}2分钟无操作，自动退出${NC}"
        exit 0
    fi
    # 有效输入判定
    if [ "$OPTION" = "1" ] || [ "$OPTION" = "2" ]; then
        break
    else
        echo -e "${RED}❌ 输入无效！请仅输入数字1（安装）或2（卸载）${NC}"
        echo -e "${YELLOW}再次提示：单选1或2，无操作2分钟后自动退出${NC}"
    fi
done
# 卸载函数（直接将关键值改为0，不询问）
uninstall() {
    # 卸载前二次确认（新增无效输入循环）
    clear
    echo -e "${BOLD}此操作会执行：${NC}"
    echo "禁用manage_shutdown（关键值改为0）、"
    echo "清理systemd服务、"
    echo "清理udev规则、"
    echo "清理业务脚本、"
    echo "清理脚本日志目录"
    echo -e "\n${YELLOW}输入y/Y确认卸载，按ctrl+c中断退出${NC}"
    
    # 新增：循环等待有效输入
    while true; do
        read -t 120 CONFIRM_UNINSTALL
        if [ $? -ne 0 ]; then
            echo -e "\n${RED}2分钟无操作，自动退出${NC}"
            exit 0
        fi
        if [ "$CONFIRM_UNINSTALL" = "y" ] || [ "$CONFIRM_UNINSTALL" = "Y" ]; then
            break
        else
            echo -e "${RED}输入无效，请输入y/Y确认卸载，或按ctrl+c中断${NC}"
        fi
    done
    
    # 直接将所有磁盘关键值设为0（不询问）
    echo -e "\n${BOLD}【卸载步骤1：禁用关机安全断电功能】${NC}"
    for disk_dir in /sys/class/scsi_disk/*; do
        [[ -d "$disk_dir" ]] || continue
        disk_scsi_id=$(basename "$disk_dir")
        echo "处理磁盘$disk_scsi_id..."
        
        # 将 manage_shutdown 强制设为 0
        echo 0 > "$disk_dir/manage_shutdown" 2>/dev/null
        new_value=$(cat "$disk_dir/manage_shutdown" 2>/dev/null)
        if [[ "$new_value" -eq 0 ]]; then
            echo "  - 已成功设置 manage_shutdown=0"
        else
            echo "  - 设置 manage_shutdown=0 失败"
        fi
    done
    
    # 原卸载逻辑：清理组件（完全保留，无修改）
    echo -e "\n${BOLD}【卸载步骤2：清理组件】${NC}"
    # 1. 清理systemd服务
if [ -f "$SYSTEMD_SERVICE" ]; then
    # 先停止服务（若正在运行）
    if systemctl is-active --quiet scsi-disk-manager.service; then
        systemctl stop scsi-disk-manager.service
    fi
    # 关键修改：捕获 systemctl disable 的输出，判断是否删除开机自启链接
    echo "正在禁用systemd服务开机自启..."
    DISABLE_OUTPUT=$(systemctl disable scsi-disk-manager.service 2>&1)  # 捕获 stdout 和 stderr
    if echo "$DISABLE_OUTPUT" | grep -q "Removed"; then
        # 捕捉到 Removed 提示，说明开机自启链接已成功删除
        echo "  - 已成功删除 scsi-disk-manager 服务的开机自启链接"
    else
        # 未捕捉到，提示可能未删除（可能本身未启用开机自启，或链接不存在）
        echo "  - 未检测到开机自启链接（可能已删除或未启用），跳过链接删除"
    fi
    # 删除服务文件
    rm -f "$SYSTEMD_SERVICE"
    systemctl daemon-reload
    echo "1. 已清理systemd服务"
else
    echo "1. systemd服务文件不存在，跳过清理"
fi
    # 2. 清理udev规则
    if [ -f "$UDEV_RULE" ]; then
        rm -f "$UDEV_RULE"
        udevadm control --reload-rules
        echo "2. 已清理udev规则"
    else
        echo "2. udev规则文件不存在，跳过清理"
    fi
    # 3. 清理业务脚本（同步更新路径）
    if [ -f "$SERVICE_SCRIPT" ]; then
        rm -f "$SERVICE_SCRIPT"
        echo "3. 已清理业务脚本"
    else
        echo "3. 业务脚本不存在，跳过清理"
    fi
    # 4. 清理日志目录（自定义日志）
    if [ -d "$LOG_DIR" ]; then
        rm -rf "$LOG_DIR"
        echo "4. 已清理自定义日志目录"
    else
        echo "4. 自定义日志目录不存在，跳过清理"
    fi
    echo -e "\n${GREEN}✅ 【卸载完成】已禁用关机磁盘安全断电功能并清理所有组件${NC}"
    exit 0
}
  
# 若选择卸载，执行卸载流程；选择安装，继续后续功能选择
if [ "$OPTION" = "2" ]; then
    uninstall
elif [ "$OPTION" != "1" ]; then
    echo -e "${RED}无效选项，退出${NC}"
    exit 1
fi
# 直接启用功能2：manage_shutdown（不再提供功能选择）
SELECTED_FUNC_LIST=("manage_shutdown:关机安全断电管理")
SELECTED_FUNCS="2"
# 部署步骤1/4：修改为目录检测（替换原挂载检测）
echo -e "\n${BOLD}【部署步骤1/4:检查日志目录状态】${NC}"
if [ ! -d "$LOG_DIR" ]; then
    echo -e "${YELLOW}日志目录$LOG_DIR不存在，正在创建...${NC}"
    mkdir -p "$LOG_DIR" 2>/dev/null
    chmod 777 "$LOG_DIR"
    if [ $? -ne 0 ]; then
        echo -e "${RED}创建日志目录失败，部署终止！${NC}"
        exit 1
    fi
fi
echo -e "${GREEN}✅  日志目录$LOG_DIR已就绪，继续部署${NC}"
sleep 1
# 若业务脚本存在，在生成业务脚本前添加覆盖提示：
if [ -f "$SERVICE_SCRIPT" ]; then
    echo -e "${YELLOW}提示：$SERVICE_SCRIPT 已存在，即将覆盖${NC}"
fi
# 步骤1/3：动态生成服务脚本（仅保留 manage_shutdown 功能，删除备份相关逻辑）
echo -e "${BOLD}【部署步骤2/4：生成业务脚本】${NC}"
cat > "$SERVICE_SCRIPT" <<EOF
#!/bin/bash
# 飞牛OS磁盘管理业务脚本（仅启用：关机安全断电管理）
AUTO_TRIGGER=\${AUTO_TRIGGER:-false}
LOG_DIR="$LOG_DIR"
LOG_FILE="$LOG_FILE"
SERVICE_PATH="$SERVICE_SCRIPT"
# 30秒等待
if [ "\$AUTO_TRIGGER" = "false" ]; then
    echo -n "【等待阶段】等待日志目录就绪，30秒后开始执行..."
    for ((i=30; i>0; i--)); do
        echo -ne "\r【等待阶段】等待日志目录就绪，\$i秒后开始执行..."
        sleep 1
    done
    echo -e "\r【等待阶段】等待日志目录就绪，0秒后开始执行..."
else
    sleep 30
fi
# 新增：目录检测（替换原挂载检测）
if [ ! -d "\$LOG_DIR" ]; then
    if [ "\$AUTO_TRIGGER" = "true" ]; then
        echo "【自动触发失败】日志目录\$LOG_DIR不存在，无法执行" >> "\$LOG_FILE"
    else
        echo "【错误】日志目录\$LOG_DIR不存在，无法执行"
    fi
    exit 1
fi
# 创建日志目录（777权限）
mkdir -p "\$LOG_DIR" 2>/dev/null
chmod 777 "\$LOG_DIR"
touch "\$LOG_FILE" 2>/dev/null
chmod 777 "\$LOG_FILE"
# 权限检查
if [[ \$EUID -ne 0 ]]; then
    echo "【权限错误】需root权限运行" | tee -a "\$LOG_FILE"
    echo "【手动执行提示】若需手动触发配置，可执行：sudo \$SERVICE_PATH" | tee -a "\$LOG_FILE"
    exit 1
fi
# 启动信息
START_TIME=\$(date +'%Y-%m-%d %H:%M:%S')
if [ "\$AUTO_TRIGGER" = "true" ]; then
    echo -e "\n\n\n================【自动触发-业务脚本启动】\$START_TIME================
" | tee -a "\$LOG_FILE"
else
    echo -e "\n\n\n================【手动触发-业务脚本启动】\$START_TIME================
" | tee -a "\$LOG_FILE"
fi
sleep 1
# 磁盘配置核心逻辑（仅处理 manage_shutdown）
DISK_TOTAL=\$(ls -A /sys/class/scsi_disk/ 2>/dev/null | wc -l)
echo "【磁盘检测】共读取到\$DISK_TOTAL个硬盘" | tee -a "\$LOG_FILE"
echo "-------------------------------------------------------------------------------" | tee -a "\$LOG_FILE"
# 新增：细分统计变量
declare -a SUCCESS_DISKS=()
declare -a FAILED_DISKS=()
declare -a NO_OPERATION_DISKS=()
DISK_PROCESSED=0
SUCCESS_PROCESSED=0
FAILED_PROCESSED=0
NO_OPERATION_COUNT=0
for disk_dir in /sys/class/scsi_disk/*; do
    [[ -d "\$disk_dir" ]] || continue
    DISK_PROCESSED=\$((DISK_PROCESSED + 1))
    
    disk_scsi_id=\$(basename "\$disk_dir")
    disk_dev_subdir=\$(find "\$disk_dir/device/block/" -maxdepth 1 -type d ! -name "block" | head -n1)
    disk_dev=\$(basename "\$disk_dev_subdir")
    disk_dev_path="/dev/\$disk_dev"
    # 获取磁盘信息
    if command -v lsblk &>/dev/null; then
        disk_model=\$(lsblk -no MODEL "\$disk_dev_path" 2>/dev/null || echo "未知型号")
        disk_serial=\$(lsblk -no SERIAL "\$disk_dev_path" 2>/dev/null || echo "未知序列号")
    else
        disk_model="未知型号"
        disk_serial="未知序列号"
    fi
    # 配置输出
    echo "【硬盘信息】盘符:\$disk_dev_path | 型号:\$disk_model | 序列号:\$disk_serial" | tee -a "\$LOG_FILE"
    
    # 新增：当前磁盘的状态标记
    all_success=true
    has_modification=false
    all_no_operation=true
    
    # 仅配置 manage_shutdown
    file_name="manage_shutdown"
    func_desc="关机安全断电管理"
    file_path="\$disk_dir/\$file_name"
    
    if [[ -f "\$file_path" ]]; then
        orig_value=\$(cat "\$file_path")
        printf "%-30s（%-20s） 原始值：%s → " "\$file_name" "\$func_desc" "\$orig_value" | tee -a "\$LOG_FILE"
        
        # 根据原始值判断是否需要修改
        if [[ "\$orig_value" -eq 0 ]]; then
            # 原始值为0，执行修改
            echo 1 > "\$file_path" 2>/dev/null
            new_value=\$(cat "\$file_path")
            if [[ "\$new_value" -eq 1 ]]; then
                result="新值：\$new_value【成功】"
                has_modification=true
                all_no_operation=false
            else
                result="新值：\$new_value【失败】"
                all_success=false
                all_no_operation=false
            fi
        else
            # 原始值为1，不修改
            result="保持值：1【无需修改】"
        fi
        
        echo "\$result" | tee -a "\$LOG_FILE"
    else
        printf "%-30s（%-20s） 文件不存在【失败】\n" "\$file_name" "\$func_desc" | tee -a "\$LOG_FILE"
        all_success=false
        all_no_operation=false
    fi
    
    echo "-------------------------------------------------------------------------------" | tee -a "\$LOG_FILE"
    # 记录结果
    disk_info="盘符:\$disk_dev_path | 型号:\$disk_model | 序列号:\$disk_serial | SCSI_ID:\$disk_scsi_id"
    if [ "\$all_success" = true ]; then
        if [ "\$all_no_operation" = true ]; then
            NO_OPERATION_DISKS+=("\$disk_info")
            NO_OPERATION_COUNT=\$((NO_OPERATION_COUNT + 1))
        else
            SUCCESS_DISKS+=("\$disk_info")
            SUCCESS_PROCESSED=\$((SUCCESS_PROCESSED + 1))
        fi
    else
        FAILED_DISKS+=("\$disk_info")
        FAILED_PROCESSED=\$((FAILED_PROCESSED + 1))
    fi
done
# 配置统计
echo "----------------------------【配置统计】----------------------------------------" | tee -a "\$LOG_FILE"
echo "【处理总量】共读取到\$DISK_TOTAL个硬盘 | 本次处理成功\$SUCCESS_PROCESSED个 | 本次处理失败\$FAILED_PROCESSED个 | 本次无需处理\$NO_OPERATION_COUNT个" | tee -a "\$LOG_FILE"
# 提示信息
echo "【提示】" | tee -a "\$LOG_FILE"
echo "1. 若自动化失败尝试手动执行：sudo /usr/local/bin/scsi-disk-manager" | tee -a "\$LOG_FILE"
echo "2. 卸载脚本：重新执行原始脚本并选择卸载" | tee -a "\$LOG_FILE"
echo "3. 本日志自动保留最新500行，超出自动清理老旧日志" | tee -a "\$LOG_FILE"
# 结束信息
END_TIME=\$(date +'%Y-%m-%d %H:%M:%S')
if [ "\$AUTO_TRIGGER" = "true" ]; then
    echo "………………………………【自动触发-业务脚本结束】\$END_TIME………………………………
    
    
    " | tee -a "\$LOG_FILE"
else
    echo "………………………………【手动触发-业务脚本结束】\$END_TIME………………………………
    
    
    " | tee -a "\$LOG_FILE"
fi
# 日志裁剪：仅保留最后500行
if [ -f "\$LOG_FILE" ]; then
tail -n 500 "\$LOG_FILE" > "\$LOG_FILE.tmp"
mv -f "\$LOG_FILE.tmp" "\$LOG_FILE"
chmod 777 "\$LOG_FILE"
fi
EOF
# 设置服务脚本权限为777
chmod 777 "$SERVICE_SCRIPT"
echo -e "${GREEN}✅  业务脚本已生成（仅启用：关机安全断电管理）${NC}"
sleep 1
echo -e "\n${BOLD}【部署步骤3/4：配置systemd服务】${NC}"
cat > "$SYSTEMD_SERVICE" <<EOF
[Unit]
Description=SCSI Disk Manager Service
After=local-fs.target
[Service]
Type=oneshot
User=root
Group=root
Environment="AUTO_TRIGGER=true"
ExecStart=$SERVICE_SCRIPT
StandardOutput=null
StandardError=null
[Install]
WantedBy=multi-user.target
EOF
# 赋权：777权限
chmod 777 "$SYSTEMD_SERVICE"
echo -e "${GREEN}✅  systemd服务文件已生成${NC}"
# 记录触发前的日志位置
echo "尝试记录触发前日志位置，用于开机自启验证"
log_position=$(wc -l < "$LOG_FILE" 2>/dev/null || echo 0)
# 让 systemd 服务管理器重新读取所有服务配置文件
systemctl daemon-reload
# 尝试启用开机自启、启动systemd服务、触发业务脚本执行
echo -e "启用开机自启、启动systemd服务、触发业务脚本执行..."
echo -e "请等待验证systemd服务触发业务脚本，大约35秒..."
systemctl enable --now scsi-disk-manager.service
echo -e "请等待日志验证..."
# 等待3秒
sleep 3
# 对比触发前的日志位置检查日志是否有新的触发记录
new_trigger=$(tail -n +"$log_position" "$LOG_FILE" 2>/dev/null | grep -E "【自动触发-业务脚本启动】")
if [ -n "$new_trigger" ]; then
    echo -e "  ${GREEN}✓ 开机自启测试成功，已生成自动触发日志${NC}"
   else
    echo -e "  ${YELLOW}⚠ 开机自启测试失败，未检测到新日志${NC}"
fi
# 尝试捕获触发日志
echo -e "\n${BOLD}【尝试读取日志验证systemd服务触发状态】${NC}"
START_RECORD=$(grep -E "【(自动|手动)触发-业务脚本启动】" "$LOG_FILE" | tail -n 1)
if [ -n "$START_RECORD" ]; then
    START_TIME=$(echo "$START_RECORD" | sed -n 's/.*【[^】]*】\([0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\} [0-9]\{2\}:[0-9]\{2\}:[0-9]\{2\}\).*/\1/p')
    if [ -n "$START_TIME" ]; then
        echo -e "${GREEN}✅  成功捕获脚本启动时间记录：$START_TIME${NC}"
        echo -e "${GREEN}systemd服务开机自启已配置并触发，请在储存空间1/_HDDlog目录查看完整日志${NC}"
    else
        echo -e "${YELLOW}⚠ 捕获到启动记录，但未提取到时间戳，建议手动查看日志确认${NC}"
    fi
else
    echo -e "${RED}❌ 未捕获到服务启动日志，可能systemd服务触发失败${NC}"
    echo -e "${YELLOW}排查建议：1. 检查服务状态：systemctl status scsi-disk-manager.service 2. 手动查看日志：cat $LOG_FILE${NC}"
fi



sleep 1
# 步骤3：配置udev规则
echo -e "\n${BOLD}【部署步骤4/4：部署新插入磁盘自动触发udev规则】${NC}"
cat > "$UDEV_RULE" <<EOF
ACTION=="add", SUBSYSTEM=="scsi_disk", RUN+="/bin/systemctl start scsi-disk-manager.service"
EOF
chmod 777 "$UDEV_RULE"
udevadm control --reload-rules
echo -e "${GREEN}✅  udev规则文件已生成${NC}"
sleep 1

# 记录触发前的日志位置
echo "尝试记录触发前日志位置，用于udev有效性验证"
log_position=$(wc -l < "$LOG_FILE" 2>/dev/null || echo 0)

# 验证udev规则是否生效（完全保留原有代码）
echo -e "\n${BOLD}【验证udev规则有效性】${NC}"
echo "正在筛选符合条件的scsi_disk设备（避免唤醒休眠硬盘）..."
echo "---------------------------------------------------"
declare -a CANDIDATE_DEVICES=()
declare -a CANDIDATE_DESC=()
while read -r dev; do
    state_file="${dev}/device/state"
    if [ ! -f "$state_file" ] || [ "$(cat "$state_file")" != "running" ]; then
        continue
    fi
    disk_scsi_id=$(basename "$dev")
    disk_dev_subdir=$(find "$dev/device/block/" -maxdepth 1 -type d ! -name "block" | head -n1)
    disk_dev=$(basename "$disk_dev_subdir")
    [ -z "$disk_dev" ] && continue
    disk_dev_path="/dev/$disk_dev"
    
    disk_model=$(lsblk -d -n -o MODEL "$disk_dev_path" 2>/dev/null || echo "未知型号")
    disk_rm=$(lsblk -d -n -o RM "$disk_dev_path" 2>/dev/null || echo 0)
    disk_rotational=$(cat "/sys/block/${disk_dev}/rotational" 2>/dev/null || echo 1)
    if echo "$disk_dev" | grep -qi "^mmcblk" || echo "$disk_model" | grep -qi "mmc"; then
        echo "❌ 排除设备：/dev/${disk_dev}（MMC设备，型号：${disk_model}）"
        continue
    fi
    # 新增：排除系统盘（综合判断）
    is_system_disk=false
    # 方法1：检查是否挂载为根文件系统
    if mount | grep -q "^/dev/${disk_dev}[0-9]*.*on.*/ type"; then
       is_system_disk=true
    fi
    # 方法2：检查udev系统盘属性
    if udevadm info -q property -n "/dev/$disk_dev" 2>/dev/null | grep -q "UDISKS_SYSTEM=1"; then
       is_system_disk=true
    fi
    if [ "$is_system_disk" = true ]; then
       echo "❌ 排除设备：/dev/${disk_dev}（系统盘，型号：${disk_model}）"
       continue
    fi
   #固态和机械盘规则
    disk_size_raw=$(lsblk -d -n -o SIZE "$disk_dev_path" 2>/dev/null || echo "0")
    if echo "$disk_size_raw" | grep -qi "G"; then
        disk_size=$(echo "$disk_size_raw" | sed 's/[Gg]//; s/\..*//; s/[^0-9]//g')
    elif echo "$disk_size_raw" | grep -qi "M"; then
        mb_size=$(echo "$disk_size_raw" | sed 's/[Mm]//; s/\..*//; s/[^0-9]//g')
        disk_size=$(( mb_size / 1024 ))
    else
        disk_size=0
    fi
    disk_size=${disk_size:-0}
    is_usb_candidate=0
    if [ "$disk_rm" -eq 1 ] && [ "$disk_size" -lt 64 ]; then
        is_usb_candidate=1
        device_type="U盘/读卡器"
        type_desc="${device_type}（容量：${disk_size_raw}，型号：${disk_model}，判定条件：可移除设备 + 容量<64GB）"
        echo "✅ 符合条件（优先U盘）：/dev/${disk_dev} - ${type_desc}"
        CANDIDATE_DEVICES+=("$dev|$disk_size|$disk_size_raw|$disk_rm|u盘|$disk_dev|$disk_model|$disk_rotational")
        CANDIDATE_DESC+=("$type_desc")
        continue
    fi
    if [ "$disk_rotational" = "0" ] || echo "$disk_model" | grep -qiE "ssd|solid state"; then
        disk_type="ssd"
        type_desc="固态硬盘（容量：${disk_size_raw}，型号：${disk_model}，可移除：$( [ "$disk_rm" -eq 1 ] && echo "是" || echo "否" )，判定依据：$( [ "$disk_rotational" = "0" ] && echo "无旋转部件" || echo "型号判定" )"
        echo "✅ 符合条件：/dev/${disk_dev} - ${type_desc}"
        CANDIDATE_DEVICES+=("$dev|$disk_size|$disk_size_raw|$disk_rm|$disk_type|$disk_dev|$disk_model|$disk_rotational")
        CANDIDATE_DESC+=("$type_desc")
    else
        disk_type="hdd"
        hdd_state_desc=""
        is_active=0
        if command -v hdparm &>/dev/null; then
            hdparm_output=$(hdparm -C "$disk_dev_path" 2>/dev/null | grep "drive state is:")
            if echo "$hdparm_output" | grep -qiE "active|idle"; then
                is_active=1
                hdd_state_desc="（未休眠）"
            else
                hdd_state_desc="（已休眠，跳过）"
            fi
        else
            power_state_file="/sys/block/${disk_dev}/power/state"
            if [ -f "$power_state_file" ]; then
                power_state=$(cat "$power_state_file")
                if [ "$power_state" = "0" ] || [ "$power_state" = "active" ] || [ "$power_state" = "idle" ]; then
                    is_active=1
                    hdd_state_desc="（未休眠）"
                else
                    hdd_state_desc="（已休眠，跳过）"
                fi
            else
                hdd_state_desc="（状态未知，默认已休眠，跳过）"
            fi
        fi
        if [ "$is_active" -eq 1 ]; then
            type_desc="机械硬盘（容量：${disk_size_raw}，型号：${disk_model}，可移除：$( [ "$disk_rm" -eq 1 ] && echo "是" || echo "否" )，判定依据：有旋转部件）${hdd_state_desc}"
            echo "✅ 符合条件：/dev/${disk_dev} - ${type_desc}"
            CANDIDATE_DEVICES+=("$dev|$disk_size|$disk_size_raw|$disk_rm|$disk_type|$disk_dev|$disk_model|$disk_rotational")
            CANDIDATE_DESC+=("$type_desc")
        else
            echo "❌ 排除设备：/dev/${disk_dev} - 机械硬盘（容量：${disk_size_raw}，型号：${disk_model}）${hdd_state_desc}"
        fi
    fi
done < <(find /sys/class/scsi_disk/ -maxdepth 1 -type l)
echo "---------------------------------------------------"
# 筛选最佳测试设备
TEST_DEVICE=""
TEST_DEVICE_INFO=""
candidate_count=${#CANDIDATE_DEVICES[@]}
if [ "$candidate_count" -gt 0 ]; then
    echo -e "\n正在从 ${candidate_count} 个符合条件的设备中选择测试目标..."
    # 1. 优先挑选U盘
    for i in "${!CANDIDATE_DEVICES[@]}"; do
        dev_info="${CANDIDATE_DEVICES[$i]}"
        IFS='|' read -r dev size size_raw rm type dev_name model rotational <<< "$dev_info"
        if [ "$type" = "u盘" ]; then
            TEST_DEVICE="$dev"
            TEST_DEVICE_INFO="${CANDIDATE_DESC[$i]}"
            break
        fi
    done
    # 2. 若无U盘，挑选固态硬盘
    if [ -z "$TEST_DEVICE" ]; then
        for i in "${!CANDIDATE_DEVICES[@]}"; do
            dev_info="${CANDIDATE_DEVICES[$i]}"
            IFS='|' read -r dev size size_raw rm type dev_name model rotational <<< "$dev_info"
            if [ "$type" = "ssd" ]; then
                TEST_DEVICE="$dev"
                TEST_DEVICE_INFO="${CANDIDATE_DESC[$i]}"
                break
            fi
        done
    fi
    # 3. 若无SSD，挑选未休眠的机械硬盘
    if [ -z "$TEST_DEVICE" ]; then
        for i in "${!CANDIDATE_DEVICES[@]}"; do
            dev_info="${CANDIDATE_DEVICES[$i]}"
            IFS='|' read -r dev size size_raw rm type dev_name model rotational <<< "$dev_info"
            if [ "$type" = "hdd" ]; then
                TEST_DEVICE="$dev"
                TEST_DEVICE_INFO="${CANDIDATE_DESC[$i]}"
                break
            fi
        done
    fi
fi


# 筛选完毕执行模拟触发
if [ -n "$TEST_DEVICE" ]; then
    echo -e "\n${GREEN}✅ 已选择测试设备：${TEST_DEVICE_INFO}${NC}"
    dev_name=$(basename "$TEST_DEVICE")
    
    log_position=$(wc -l < "$LOG_FILE" 2>/dev/null || echo 0)
    
    echo "  向设备 [scsi_disk/$dev_name] 发送add事件模拟触发，..."
    echo "  请等待日志验证约35秒..."
    if sudo udevadm trigger \
        --subsystem-match=scsi_disk \
        --sysname-match="$dev_name" \
        --action=add; then
        
        sleep 35
        # 对比触发前的日志位置检查日志是否有新的触发记录
        new_trigger=$(tail -n +"$log_position" "$LOG_FILE" 2>/dev/null | grep -E "【自动触发-业务脚本启动】")
        if [ -n "$new_trigger" ]; then
            echo -e "  ${GREEN}✓ 设备触发成功，已生成自动触发日志${NC}"
            echo -e "${GREEN}✅  udev规则有效性验证成功，请在储存空间1/_HDDlog目录查看完整日志，${NC}"
            echo -e "${GREEN}✅  初次部署完成日志有两次执行记录，第一次是验证开机自启，第二次是验证udev规则模拟新插入磁盘触发${NC}"
        else
            echo -e "  ${YELLOW}⚠ 设备触发成功，但未检测到新日志（可能udev规则无法触发systemd服务）${NC}"
        fi
    else
        echo -e "  ${RED}✗ 设备触发失败${NC}"
    fi
else
    echo -e "\n${YELLOW}⚠ 未检测到符合条件的scsi_disk设备（已排除mmc设备、系统盘和休眠硬盘），已跳过模拟测试，请按照后面提示的步骤手动测试${NC}"
     # 手动验证udev步骤提示
    echo -e "${YELLOW}如需验证udev自动触发功能，请按以下步骤：${NC}"
    echo "1. 新插入能被系统识别为SCSI的磁盘（U盘可识别）；"
    echo "2. 等待40秒（服务执行延迟）；"
    echo "3. 查看日志：（飞牛系统的储存空间1通常挂载为/vol1/1000，可以在文件管理，储存空间1/_HDDlog目录查看日志文件），终端查看日志指令cat $LOG_FILE"
    echo "4. 若日志中出现【自动触发-业务脚本启动】的最新时间记录，说明udev触发功能正常，能自动配置新插入的磁盘。"
fi
echo -e "\n${BOLD}---------------------------------------------------${NC}"

sleep 2

# 部署完成提示
echo -e "\n${GREEN}【✅  部署已完成】已启用：关机磁盘安全断电管理功能 ${NC}"| tee -a "$LOG_FILE"
echo -e "【手动操作提示】" | tee -a "$LOG_FILE"
echo "1. 若自动化失败，手动执行指令代替：sudo $SERVICE_SCRIPT" | tee -a "$LOG_FILE"
echo "2. 查看完整配置日志：cat $LOG_FILE" | tee -a "$LOG_FILE"
echo "3. 卸载脚本：重新执行部署脚本并选择选项2" | tee -a "$LOG_FILE"
echo -e "【日志提示】本日志自动保留最新500行，老旧日志自动清理。如需手动清理可删除日志文件：$LOG_FILE" | tee -a "$LOG_FILE"
echo -e "\n${BOLD}---------------------------------------------------${NC}"